from turtle import *
import time
import random


color = ["red", "blue", "green", "purple"]
# 绘制树型
# param: plist: 线段列表，l: 分支长度，a: 角度，f: 线段长度的缩放因子
def tree(plist,l,a,f):
    # 当分支长度小于3，则停止递归
    if l > 3:
        lst = []
        for p in plist:
            p.forward(l)
            p.color(random.choice(color))
            q = p.clone()
            # 对称形成左右两个分支
            p.left(a)
            q.right(a)
            #将两个新的画笔添加到列表中
            lst.append(p)
            lst.append(q)
        for x in tree(lst, l * f, a, f):
            # 使用 yield 语句返回一个生成器对象，每次迭代返回 None。
            yield None
def make_tree():
    p=Turtle()
    p.setundobuffer(None) # 关闭撤销缓冲区以提高性能。
    p.hideturtle() # 隐藏画笔
    p.speed(0) # 设置画笔速度为最快
    p.getscreen().tracer(30, 0) # 设置屏幕更新频率，以优化绘图速度
    p.left(90) # 画笔左转 90 度，使其向上
    p.penup() # 抬起画笔
    p.forward(-210) # 移动画笔到合适位置
    p.pendown() # 下落画笔
    t = tree([p], 200, 65, 0.6375)  # 传入画笔、长度、角度、缩放因子
    # 遍历生成器 t，这一步实际上是为了执行生成器中的递归调用
    for x in t:
        pass
    # 打印画笔列表的长度
    print(len(p.getscreen().turtles()))


if __name__ == '__main__':
    make_tree()
    mainloop() # 启动事件循环，使窗口保持活跃，并处理用户的交互。
